
%{
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include "end.h"

word tmp_word;
gdsl_list_t list=NULL;
gdsl_list_t segmentos;
int insert=0;

%}


WORD .+" "#

GENERO gen=[m|f|"?"]

NUMERO num=[s|p|"?"]

GRAU gra=[a|d|"?"]

CLASS class=[S|E|P|"?"]

FUNCAO funcao=[S|O|D|"?"]

FIMORACAO "FIMORACAO"

CONTEXTO ------
%%

{WORD} {
	#ifdef DEBUG
		puts("word");
		puts(yytext);
	#endif
	if(tmp_word==NULL){
			if(list==NULL)
				list=gdsl_list_alloc("",NULL,NULL);

		tmp_word = (word)malloc(sizeof(Word));
		tmp_word->termo = (char*) malloc(sizeof(char)*
							(strlen(yytext)));
		strncpy(tmp_word->termo, yytext, strlen(yytext)-2);
		insert=1;
		#ifdef DEBUG
			puts("tmp_word->termo");
		#endif
	}

}

{GENERO} {
	#ifdef DEBUG
		puts("genero");
		puts(yytext);
	#endif
	if(tmp_word!=NULL){
		switch( yytext[4] ) {
			case 'f': tmp_word->genero = FEMININO;break;
			case 'm': tmp_word->genero = MASCULINO; break;
			default : tmp_word->genero = IND; break;
		}
		#ifdef DEBUG
			puts("tmp_word->genero");
		#endif
	}	
}

{NUMERO} {
	#ifdef DEBUG
		puts("numero");
		puts(yytext);
	#endif
	if(tmp_word!=NULL){
		switch( yytext[4] ) {
			case 's': tmp_word->numero = SINGULAR;break;
			case 'p': tmp_word->numero = PLURAL; break;
			default : tmp_word->numero = IND; break;
		}
		#ifdef DEBUG
			puts("tmp_word->numero");
		#endif
	}	
}

{GRAU} {
	#ifdef DEBUG
		puts("grau");
		puts(yytext);
	#endif
	if(tmp_word!=NULL){
		switch( yytext[strlen(yytext)-1] ) {
			case 'a': tmp_word->grau = AUMENTATIVO ;break;
			case 'd': tmp_word->grau = DIMINUTIVO ; break;
			default : tmp_word->grau = IND; break;
		}
		#ifdef DEBUG
			puts("tmp_word->grau");
		#endif
	}	
}

{CLASS} {
	#ifdef DEBUG
		puts("class");
		puts(yytext);
	#endif
	if(tmp_word!=NULL){
		switch( yytext[strlen(yytext)-1] ) {
			case 'S': tmp_word->classificacao = SND ;break;
			case 'E': tmp_word->classificacao = ELIPSE ; break;
			case 'P': tmp_word->classificacao = PRONOME ;break;
			default : tmp_word->classificacao = IND; break;
		}
		#ifdef DEBUG
			puts("tmp_word->classificacao");
		#endif
	}	
}

{FUNCAO} {
	#ifdef DEBUG
		puts("funcao");
		puts(yytext);
	#endif
	if(tmp_word!=NULL){
		switch( yytext[strlen(yytext)-1] ) {
			case 'S': tmp_word->funcao_sintatica = SUJEITO ;break;
			case 'O': tmp_word->funcao_sintatica = OBJETO ; break;
			case 'D': tmp_word->funcao_sintatica = OBJETO ;break;
			default : tmp_word->funcao_sintatica = IND; break;
		}
		#ifdef DEBUG
			puts("tmp_word->funcao_sintatica");
		#endif
	}	
}


FIMORACAO {
	#ifdef DEBUG
		puts(yytext);
	#endif
	if(gdsl_list_get_size(list)>0){
		gdsl_list_insert_tail(segmentos,list);
		list=gdsl_list_alloc("",NULL,NULL);
		#ifdef DEBUG
			puts("segmento inserted");
		#endif
	}
	
}

\n {
	if(list!=NULL && insert){
		gdsl_list_insert_tail(list,tmp_word);
		insert = 0;
		#ifdef DEBUG
			puts("inserted");
		#endif
	}
	tmp_word= NULL;
}

CONTEXTO {

}

. {
	
  }

%%

